package thread.demo10.WaitAndNotify;

/**
 * 线程间通信
 * 多个线程并发执行时, 在默认情况下CPU是随机切换线程的，当我们需要多个线程来共同完成一件任务，
 * 并且我们 希望他们有规律的执行, 那么多线程之间需要一些协调通信，以此来帮我们达到多线程共同操作一份数据。
 * 多个线程在操作同一份数据时， 避免对同一共享变量的争夺
 */
public class Consumer extends Thread{
    private Car car;

    public Consumer(Car car) {
        this.car = car;
    }

    @Override
    public void run() {
        while(true){
            synchronized (car){
                if(car.flag == false){
                    try {
                        car.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("消费者正在来提"+car.name+"车");
                car.flag = false;
                car.notify();
                System.out.println(car.name+"车已经提好,生产者可以继续生产车了");
                System.out.println("----------------------------");
            }
        }
    }
}
